package com.app.utils;

import cn.hutool.crypto.digest.DigestUtil;
import com.app.pojo.LoginState;
import com.app.pojo.User;
import org.springframework.stereotype.Component;

import javax.servlet.http.Cookie;
import java.util.Date;
import java.util.HashMap;
@Component//单例设计模式
public class TokenManager {
    HashMap<String, LoginState> map=new HashMap<>();
    private static TokenManager tokenManager;
//    private TokenManager(){}
//
//    public static TokenManager getTokenManager(){
//        if (tokenManager==null) tokenManager=new TokenManager();
//        return tokenManager;
//    }
    /**
     * 根据token获取已经连接的用户id，失效则返回null
     * @param token
     * @return: userId
     * @author: 本小蛋
     * @time: 2021/8/16 11:28
     */
    public String getUserId(String token){
        if (token==null) return null;
        LoginState loginState=map.get(token);
        if (loginState==null) return null;
        if (loginState.isTimeOut()){//超时就清楚
            System.out.println("token过期！");
            map.remove(token);
            return null;
        }else return loginState.getUserId();
    }
    /**
     * 添加一个登陆状态记录
     * @param userId 用户 id
     * @param maxAge 单位为 秒
     * @return: token
     * @author: 本小蛋
     * @time: 2021/8/16 12:09
     */
    public String addLoginState(String userId,int maxAge){
        String token= DigestUtil.md5Hex(userId+(int)(Math.random()*10000));
        map.put(token,new LoginState(new Date(),maxAge,userId));
        return token;
    }
}
